package br.com.consigsys.model.entity;

import java.io.Serializable;
import java.util.Date;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.apache.commons.lang3.StringUtils;


/**
 * The persistent class for the tcons_socio database table.
 * 
 */
@Entity
@Table(name="tcons_socio")
public class TconsSocio extends BaseEntity implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	@Column(name="ID_SOCIO", unique=true, nullable=false)
	private Integer idSocio;

    @Temporal( TemporalType.DATE)
	@Column(name="DATA_ADMISSAO_CARGO")
	private Date dataAdmissaoCargo;

    @Temporal( TemporalType.DATE)
	@Column(name="DATA_ADMISSAO_SOCIAL")
	private Date dataAdmissaoSocial;

    @Temporal( TemporalType.DATE)
	@Column(name="DATA_NASCIMENTO")
	private Date dataNascimento;

    @Temporal( TemporalType.TIMESTAMP)
	@Column(name="DATA_ULT_ALTERACAO")
	private Date dataUltAlteracao;

	@Column(length=100)
	private String email;

	@Column(name="END_BAIRRO", length=30)
	private String endBairro;

	@Column(name="END_CEP", length=8)
	private String endCep;

	@Column(name="END_CIDADE", length=30)
	private String endCidade;

	@Column(name="END_COMPL", length=20)
	private String endCompl;

	@Column(name="END_LOGRA", length=60)
	private String endLogra;

	@Column(name="END_NUMERO", length=10)
	private String endNumero;

	@Column(name="ESTADO_CIVIL", length=1)
	private String estadoCivil;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name="ID_CARGO")
	private TconsCargo cargo;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name="ID_CONSIGNATARIA")
	private TconsConsignataria consignataria;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name="ID_REPARTICAO")
	private TconsReparticao reparticao;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name="ID_UF")
	private TconsUf uf;

	@Column(name="LOCAL_NASCIMENTO", length=20)
	private String localNascimento;

	@Column(length=20)
	private String lotacao;

	@Column(name="MAT_FUNCIONAL", length=10)
	private String matFuncional;

	@Column(name="MAT_INSTITUIDOR", length=10)
	private String matInstituidor;
	
	@Column(name="NOM_INSTITUIDOR", length=50)
	private String nomInstituidor;

	@Column(name="MAT_SIAPE", length=10)
	private String matSiape;

	@Column(name="MAT_SOCIAL", length=10)
	private String matSocial;

	@Column(name="NOME_BANCO", length=15)
	private String nomeBanco;

	@Column(name="NOME_MAE", length=40)
	private String nomeMae;

	@Column(name="NOME_PAI", length=40)
	private String nomePai;

	@Column(name="NOME_SOCIO", length=40)
	private String nomeSocio;

	@Column(name="NUM_AGENCIA", length=5)
	private String numAgencia;

	@Column(name="NUM_BANCO", length=3)
	private String numBanco;

	@Column(name="NUM_CONTA", length=20)
	private String numConta;

	@Column(name="NUM_CPF", length=11)
	private String numCpf;

	@Column(name="NUM_HABILITACAO", length=20)
	private String numHabilitacao;

	@Column(name="NUM_IDENTIDADE", length=20)
	private String numIdentidade;

	@Column(name="NUM_TITULO_ELEITOR", length=20)
	private String numTituloEleitor;

	@Column(length=1)
	private String sexo;

	@Column(name="SIT_HISTORICO_PLC", length=1)
	private String sitHistoricoPlc;

	@Column(length=1)
	private String situacao;

	@Column(name="TELEFONE_CELULAR", length=10)
	private String telefoneCelular;

	@Column(name="TELEFONE_DDD", length=10)
	private String telefoneDdd;

	@Column(name="TELEFONE_NUMERO", length=10)
	private String telefoneNumero;

	@Column(name="TELEFONE_RAMAL", length=10)
	private String telefoneRamal;

	@Column(name="TELEFONE_TRABALHO_DDD", length=3)
	private String telefoneTrabalhoDdd;

	@Column(name="TELEFONE_TRABALHO_NUMERO", length=10)
	private String telefoneTrabalhoNumero;

	@Column(name="TIPO_SANGUINEO", length=10)
	private String tipoSanguineo;

    @Lob()
	@Column(name="TXT_OBSERVACAO")
	private String txtObservacao;

	@Column(name="USUARIO_ULT_ALTERACAO", length=150)
	private String usuarioUltAlteracao;

	private Integer versao;

	@OneToMany(mappedBy = "socio")
	private Set<TconsBeneficio> beneficios;
	
	@OneToMany(mappedBy = "socio")
	private Set<TconsDependente> dependentes;
	
	@OneToMany(mappedBy = "socio")
	private Set<TconsMovimentoMensal> movimentoMendal;
	
	
    public TconsSocio() {
    	this.uf = new TconsUf();
    	this.cargo = new TconsCargo();
    	this.reparticao = new TconsReparticao();
    }
    
    
    @PrePersist
    protected void beforePersist(){
    	this.versao = 1;
    	this.dataUltAlteracao = new Date();
    	if(StringUtils.isBlank(this.getTxtObservacao())){
			this.setTxtObservacao(null);
		}
    }

    @PreUpdate
    protected void beforeUpdate(){
    	this.dataUltAlteracao = new Date();
    	if(StringUtils.isBlank(this.getTxtObservacao())){
			this.setTxtObservacao(null);
		}
    }


	public Integer getIdSocio() {
		return this.idSocio;
	}

	public void setIdSocio(Integer idSocio) {
		this.idSocio = idSocio;
	}

	public Date getDataAdmissaoCargo() {
		return this.dataAdmissaoCargo;
	}

	public void setDataAdmissaoCargo(Date dataAdmissaoCargo) {
		this.dataAdmissaoCargo = dataAdmissaoCargo;
	}

	public Date getDataAdmissaoSocial() {
		return this.dataAdmissaoSocial;
	}

	public void setDataAdmissaoSocial(Date dataAdmissaoSocial) {
		this.dataAdmissaoSocial = dataAdmissaoSocial;
	}

	public Date getDataNascimento() {
		return this.dataNascimento;
	}

	public void setDataNascimento(Date dataNascimento) {
		this.dataNascimento = dataNascimento;
	}

	public Date getDataUltAlteracao() {
		return this.dataUltAlteracao;
	}

	public void setDataUltAlteracao(Date dataUltAlteracao) {
		this.dataUltAlteracao = dataUltAlteracao;
	}

	public String getEmail() {
		return this.email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getEndBairro() {
		return this.endBairro;
	}

	public void setEndBairro(String endBairro) {
		this.endBairro = endBairro;
	}

	public String getEndCep() {
		return this.endCep;
	}

	public void setEndCep(String endCep) {
		this.endCep = endCep;
	}

	public String getEndCidade() {
		return this.endCidade;
	}

	public void setEndCidade(String endCidade) {
		this.endCidade = endCidade;
	}

	public String getEndCompl() {
		return this.endCompl;
	}

	public void setEndCompl(String endCompl) {
		this.endCompl = endCompl;
	}

	public String getEndLogra() {
		return this.endLogra;
	}

	public void setEndLogra(String endLogra) {
		this.endLogra = endLogra;
	}

	public String getEndNumero() {
		return this.endNumero;
	}

	public void setEndNumero(String endNumero) {
		this.endNumero = endNumero;
	}

	public String getEstadoCivil() {
		return this.estadoCivil;
	}

	public void setEstadoCivil(String estadoCivil) {
		this.estadoCivil = estadoCivil;
	}


	public String getLocalNascimento() {
		return this.localNascimento;
	}

	public void setLocalNascimento(String localNascimento) {
		this.localNascimento = localNascimento;
	}

	public String getLotacao() {
		return this.lotacao;
	}

	public void setLotacao(String lotacao) {
		this.lotacao = lotacao;
	}

	public String getMatFuncional() {
		return this.matFuncional;
	}

	public void setMatFuncional(String matFuncional) {
		this.matFuncional = matFuncional;
	}

	public String getMatInstituidor() {
		return this.matInstituidor;
	}

	public void setMatInstituidor(String matInstituidor) {
		this.matInstituidor = matInstituidor;
	}

	public String getMatSiape() {
		return this.matSiape;
	}

	public void setMatSiape(String matSiape) {
		this.matSiape = matSiape;
	}

	public String getMatSocial() {
		return this.matSocial;
	}

	public void setMatSocial(String matSocial) {
		this.matSocial = matSocial;
	}

	public String getNomeBanco() {
		return this.nomeBanco;
	}

	public void setNomeBanco(String nomeBanco) {
		this.nomeBanco = nomeBanco;
	}

	public String getNomeMae() {
		return this.nomeMae;
	}

	public void setNomeMae(String nomeMae) {
		this.nomeMae = nomeMae;
	}

	public String getNomePai() {
		return this.nomePai;
	}

	public void setNomePai(String nomePai) {
		this.nomePai = nomePai;
	}

	public String getNomeSocio() {
		return this.nomeSocio;
	}

	public void setNomeSocio(String nomeSocio) {
		this.nomeSocio = nomeSocio;
	}

	public String getNumAgencia() {
		return this.numAgencia;
	}

	public void setNumAgencia(String numAgencia) {
		this.numAgencia = numAgencia;
	}

	public String getNumBanco() {
		return this.numBanco;
	}

	public void setNumBanco(String numBanco) {
		this.numBanco = numBanco;
	}

	public String getNumConta() {
		return this.numConta;
	}

	public void setNumConta(String numConta) {
		this.numConta = numConta;
	}

	public String getNumCpf() {
		return this.numCpf;
	}

	public void setNumCpf(String numCpf) {
		this.numCpf = numCpf;
	}

	public String getNumHabilitacao() {
		return this.numHabilitacao;
	}

	public void setNumHabilitacao(String numHabilitacao) {
		this.numHabilitacao = numHabilitacao;
	}

	public String getNumIdentidade() {
		return this.numIdentidade;
	}

	public void setNumIdentidade(String numIdentidade) {
		this.numIdentidade = numIdentidade;
	}

	public String getNumTituloEleitor() {
		return this.numTituloEleitor;
	}

	public void setNumTituloEleitor(String numTituloEleitor) {
		this.numTituloEleitor = numTituloEleitor;
	}

	public String getSexo() {
		return this.sexo;
	}

	public void setSexo(String sexo) {
		this.sexo = sexo;
	}

	public String getSitHistoricoPlc() {
		return this.sitHistoricoPlc;
	}

	public void setSitHistoricoPlc(String sitHistoricoPlc) {
		this.sitHistoricoPlc = sitHistoricoPlc;
	}

	public String getSituacao() {
		return this.situacao;
	}

	public void setSituacao(String situacao) {
		this.situacao = situacao;
	}

	public String getTelefoneCelular() {
		return this.telefoneCelular;
	}

	public void setTelefoneCelular(String telefoneCelular) {
		this.telefoneCelular = telefoneCelular;
	}

	public String getTelefoneDdd() {
		return this.telefoneDdd;
	}

	public void setTelefoneDdd(String telefoneDdd) {
		this.telefoneDdd = telefoneDdd;
	}

	public String getTelefoneNumero() {
		return this.telefoneNumero;
	}

	public void setTelefoneNumero(String telefoneNumero) {
		this.telefoneNumero = telefoneNumero;
	}

	public String getTelefoneRamal() {
		return this.telefoneRamal;
	}

	public void setTelefoneRamal(String telefoneRamal) {
		this.telefoneRamal = telefoneRamal;
	}

	public String getTelefoneTrabalhoDdd() {
		return this.telefoneTrabalhoDdd;
	}

	public void setTelefoneTrabalhoDdd(String telefoneTrabalhoDdd) {
		this.telefoneTrabalhoDdd = telefoneTrabalhoDdd;
	}

	public String getTelefoneTrabalhoNumero() {
		return this.telefoneTrabalhoNumero;
	}

	public void setTelefoneTrabalhoNumero(String telefoneTrabalhoNumero) {
		this.telefoneTrabalhoNumero = telefoneTrabalhoNumero;
	}

	public String getTipoSanguineo() {
		return this.tipoSanguineo;
	}

	public void setTipoSanguineo(String tipoSanguineo) {
		this.tipoSanguineo = tipoSanguineo;
	}

	public String getTxtObservacao() {
		return this.txtObservacao;
	}

	public void setTxtObservacao(String txtObservacao) {
		this.txtObservacao = txtObservacao;
	}

	public String getUsuarioUltAlteracao() {
		return this.usuarioUltAlteracao;
	}

	public void setUsuarioUltAlteracao(String usuarioUltAlteracao) {
		this.usuarioUltAlteracao = usuarioUltAlteracao;
	}

	public Integer getVersao() {
		return this.versao;
	}

	public void setVersao(Integer versao) {
		this.versao = versao;
	}

	@Override
	public Integer getId() {
		return this.getIdSocio();
	}

	@Override
	public void setId(Integer id) {
		this.setIdSocio(id);
	}


	public TconsCargo getCargo() {
		return cargo;
	}


	public void setCargo(TconsCargo cargo) {
		this.cargo = cargo;
	}


	public TconsConsignataria getConsignataria() {
		return consignataria;
	}


	public void setConsignataria(TconsConsignataria consignataria) {
		this.consignataria = consignataria;
	}


	public TconsReparticao getReparticao() {
		return reparticao;
	}


	public void setReparticao(TconsReparticao reparticao) {
		this.reparticao = reparticao;
	}


	public TconsUf getUf() {
		return uf;
	}


	public void setUf(TconsUf uf) {
		this.uf = uf;
	}


	public Set<TconsBeneficio> getBeneficios() {
		return beneficios;
	}


	public void setBeneficios(Set<TconsBeneficio> beneficios) {
		this.beneficios = beneficios;
	}


	public Set<TconsDependente> getDependentes() {
		return dependentes;
	}


	public void setDependentes(Set<TconsDependente> dependentes) {
		this.dependentes = dependentes;
	}


	public Set<TconsMovimentoMensal> getMovimentoMendal() {
		return movimentoMendal;
	}


	public void setMovimentoMendal(Set<TconsMovimentoMensal> movimentoMendal) {
		this.movimentoMendal = movimentoMendal;
	}


	/**
	 * @return the nomInstituidor
	 */
	public String getNomInstituidor() {
		return nomInstituidor;
	}


	/**
	 * @param nomInstituidor the nomInstituidor to set
	 */
	public void setNomInstituidor(String nomInstituidor) {
		this.nomInstituidor = nomInstituidor;
	}

}